A synthesis of dryland restoration techniques.

Purpose

To quantitatively examine the efficacy of vegetation restoration in drylands globally.

Questions

  1. What is the global extent of research that directly examined restoration of drylands?
  2. What were the common measures?
  3. Is the restoration of vegetation a common and primary focus?
  4. How frequently does the restoration measure outcomes beyond the focal species?
  5. What were the primary restoration goals as reported by primary authors?
  6. How much variation was there in the techniques tested and how long were experiments monitored and tested?
  7. How relatively effective were the techniques?

Step 2. Sort

A summary of sort process using PRISMA.

library(PRISMAstatement)
prisma(found = 1504,
       found_other = 5,
       no_dupes = 1039, 
       screened = 1039, 
       screen_exclusions = 861, 
       full_text = 178,
       full_text_exclusions = 100, 
       qualitative = 78, 
       quantitative = 78,
       width = 800, height = 800)

Step 3. Synthesize

Check data and calculate necessary measures.

data <- read_csv("data/data.csv")
data <- data %>%
  mutate(lrr = log(mean.t/mean.c), rii = ((mean.t-mean.c)/(mean.t + mean.c)), var.es = ((sd.t^2/n.t*mean.t^2) + (sd.c^2/n.c*mean.c^2)))
#data

#consider adding some other effect size measures and/or study-level data too

Step 4. Summarize

Explore summary level data of all data. Explore aggregation levels that support the most reasonable data structure and minimize non-independence issues.

#evidence map####
require(maps)
world<-map_data("world")
map<-ggplot() + geom_polygon(data=world, fill="gray50", aes(x=long, y=lat, group=group))
map + geom_point(data=data, aes(x=long, y=lat)) +
  labs(x = "longitude", y = "latitude") #render a literal map, i.e. evidence map, of where we study the niche in deserts globally

#add in levels and color code points on map####
map + geom_point(data=data, aes(x=long, y=lat, color = paradigm)) + 
  scale_color_brewer(palette = "Paired") +
  labs(x = "longitude", y = "latitude", color = "")

#aggregation####
se <- function(x){
  sd(x)/sqrt(length(x))
}

data.simple <- data %>%
  group_by(study.ID, paradigm, technique, measure.success) %>%
  summarise(n = n(), mean.lrr = mean(lrr), mean.rii = mean(rii), mean.var = mean(var.es))

main.data <- data %>%
  group_by(study.ID, paradigm, intervention, outcome) %>%
  summarise(n = n(), mean.lrr = mean(lrr), mean.rii = mean(rii), mean.var = mean(var.es))


#EDA data####
simple.data <- data %>% group_by(study.ID, paradigm, technique, measure.success) %>% summarise(mean.rii = mean(rii), error = se(rii))
simple.data <- na.omit(simple.data)

parad.data <- data %>% group_by(study.ID, paradigm) %>% summarise(mean.rii = mean(rii), error = se(rii))
parad.data <- na.omit(parad.data)

tech.data <- data %>% group_by(study.ID, technique) %>% summarise(mean.rii = mean(rii), error = se(rii))
tech.data <- na.omit(tech.data)

success.data <- data %>% group_by(study.ID, measure.success) %>% summarise(mean.rii = mean(rii), error = se(rii))
success.data <- na.omit(success.data)

#active
active <- data %>%
  filter(paradigm == "active")

#viz for aggregation####
ggplot(na.omit(data.simple), aes(technique, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired")

ggplot(na.omit(data.simple), aes(measure.success, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired")

#better
ggplot(main.data, aes(intervention, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired") +
  labs(fill = "")

ggplot(main.data, aes(outcome, n, fill = paradigm)) + 
  geom_bar(stat = "identity") + 
  coord_flip() + 
  scale_fill_brewer(palette = "Paired") +
  labs(fill = "")

Step 5a. EDA

Exploratory data analyses to understand data and QA/QC using Rii.

Step 5b. Models

Meta and conventional statistical models to explore relative efficacy.

Step 5. Synthesis stats

#p-value meta
library(metap)
mdata <- data %>%
  filter(paradigm == "active") %>%
  filter(!is.na(lrr)) %>%
  filter(!is.na(var.es)) %>%
  filter(!is.na(n.t)) %>%
  filter(!is.na(p)) %>%
  filter(!is.na(intervention)) %>%
  filter(is.finite(lrr))

schweder(mdata$p)

sumz(p, data = mdata)
## sumz =  52.08743 p =  0
mdata %>%
  split(.$intervention) %>%
  purrr::map(~sumz(.$p)) 
## $`carbon amendment`
## sumz =  12.80103 p =  8.089988e-38 
## 
## $`mycorrhizal inoculation`
## sumz =  10.1732 p =  1.305983e-24 
## 
## $nutrients
## sumz =  11.64501 p =  1.216527e-31 
## 
## $planting
## sumz =  35.34839 p =  5.306182e-274 
## 
## $seeding
## sumz =  29.35404 p =  1.060917e-189 
## 
## $vegetation
## sumz =  4.627053 p =  1.854529e-06 
## 
## $`water addition`
## sumz =  13.4316 p =  1.973814e-41
sumlog(mdata$p)
## chisq =  6401.81  with df =  2292  p =  0
#effect-size meta
library(meta)
m <- metagen(lrr, var.es, studlab = intervention, byvar = outcome, data = mdata)
summary(m)
## Number of studies combined: k = 1086
## 
##                                          95%-CI            z p-value
## Fixed effect model   -0.0063 [-0.0063; -0.0063] -40591712.73       0
## Random effects model  0.0529 [ 0.0094;  0.0964]         2.38  0.0172
## 
## Quantifying heterogeneity:
## tau^2 = 0.1848; H = 17034959.73 [17034959.03; 17034960.43]; I^2 = 100.0% [100.0%; 100.0%]
## 
## Test of heterogeneity:
##                      Q d.f. p-value
##  314855990392312640.00 1085       0
## 
## Results for subgroups (fixed effect model):
##                                    k                     95%-CI
## outcome = native species         244 -0.1445 [-0.1445; -0.1444]
## outcome = soil quality           462 -0.0063 [-0.0063; -0.0063]
## outcome = vegetation and habitat 247 -0.6717 [-0.6717; -0.6717]
## outcome = vertebrate community     7 -0.0208 [-0.0218; -0.0199]
## outcome = invertebrate community  22  0.8279 [ 0.7696;  0.8861]
## outcome = vegetation             104 -1.1042 [-1.1047; -1.1037]
##                                                      Q  tau^2    I^2
## outcome = native species                 1567885581.75 0.2057 100.0%
## outcome = soil quality           314836630773409216.00 0.1848 100.0%
## outcome = vegetation and habitat     13666716955659.36 1.3472 100.0%
## outcome = vertebrate community                14971.11 0.0067 100.0%
## outcome = invertebrate community                 58.56 0.0663  64.1%
## outcome = vegetation                        1796928.82 0.1222 100.0%
## 
## Test for subgroup differences (fixed effect model):
##                                    Q d.f. p-value
## Between groups      5691332250275.88    5       0
## Within groups  314850299060062400.00 1080       0
## 
## Results for subgroups (random effects model):
##                                    k                     95%-CI
## outcome = native species         244  0.5117 [ 0.3884;  0.6351]
## outcome = soil quality           462  0.2365 [ 0.1810;  0.2919]
## outcome = vegetation and habitat 247 -0.7352 [-1.0015; -0.4689]
## outcome = vertebrate community     7 -0.0080 [-0.1141;  0.0981]
## outcome = invertebrate community  22  0.8366 [ 0.4767;  1.1965]
## outcome = vegetation             104 -0.5343 [-0.6924; -0.3762]
##                                                      Q  tau^2    I^2
## outcome = native species                 1567885581.75 0.2057 100.0%
## outcome = soil quality           314836630773409216.00 0.1848 100.0%
## outcome = vegetation and habitat     13666716955659.36 1.3472 100.0%
## outcome = vertebrate community                14971.11 0.0067 100.0%
## outcome = invertebrate community                 58.56 0.0663  64.1%
## outcome = vegetation                        1796928.82 0.1222 100.0%
## 
## Test for subgroup differences (random effects model):
##                       Q d.f.  p-value
## Between groups   179.21    5 < 0.0001
## 
## Details on meta-analytical method:
## - Inverse variance method
## - DerSimonian-Laird estimator for tau^2
funnel(m)

metabias(m)
#forest(m, sortvar = intervention)